package com.itbaizhan.swaggerdemo.controller;

import com.itbaizhan.swaggerdemo.config.NotIncludeSwagger;
import com.itbaizhan.swaggerdemo.domain.People;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.annotations.ApiIgnore;
//@ApiIgnore   //加在类上
@RestController
@RequestMapping("/people")
@Api(tags = {"myDemo"},description = "描述")
public class DemoController {
    //不生成文档  是swagger内定义的
    //@ApiIgnore
    //自定义注解，不生成文档
    //@NotIncludeSwagger
    //@PostMapping("/getPeople")   指定post 访问网址：http://localhost:8080/swagger-ui.html 只有post接口
    @RequestMapping("/getPeople")
    @ApiOperation(value = "获取人员信息",notes = "通过人员编号和人员名称获取人员信息")
    public People getPeople(int id,@ApiParam(value = "姓名",required = true,name = "name") String name){
        People people = new People();
        people.setId(id);
        people.setName(name);
        people.setAddress("广东");
        return people;
    }
}
/*每个控制器包含该控制器下所有的方法及访问方式。
如果使用的是@RequestMapping 进行映射，将显示下面的所有请求方式。
如果使用@PostMapping 将只有 Post 方式可以能访问，
下面也就只显示Post 的一个。*/

/*Api

注解名称	    参数	        含义
@Api	 	            类上注解。控制整个类生成接口信息的内容
 	        tags	    类的名称，可以有多个值，多个值表示多个副本
 	       description	  描述
例：
@Api(tags = {"mydemo"},description = "描述")
 	       */

/*ApiOperation

注解名称	        参数	        含义
@ApiOperation	 	        写在方法上，对方法进行总体描述
 	              value	      接口描述
 	            notes	    提示信息

代码示例：

@ApiOperation(value="接口描述",notes = "接口提示信息)
 */

/*ApiParam

注解名称	        参数	    含义
@ApiParam	 	        写在方法参数前面。用于对参数进行描述或说明是否为必添项等说明
 	            name	参数名称
 	            value	参数描述
 	            required	是否是必须

在代码中示例：

public People getPeople(Integer id,
      @ApiParam(value="姓名",required = true)
            String name, String address) 	            */

/*
* ApiIgnore

注解名称	                    含义
@ApiIgnore	        用于方法或类或参数上，表示这个方法或类被忽略，
*                   和之前讲解的自定义注解@NotIncludeSwagger 效果类似。
*                   只是这个注解是 Swagger 内置的注解，而@NotIncludeSwagger
*                     是我们自定义的注解

*
*
* ApiImplicitParam

注解名称	                参数	            含义
@ApiImplicitParam	 	            用在方法上，表示单独的请求参数，总体功能和@ApiParam 类似。
                        value	    对接口中的参数进行简单必要的描述
                        name	    描述接口中参数的名称
                        required	是否必须
                        paramType	接口中的参数应该用在哪个地方，常用的位置有：header、query 、path
                        dataType	接口中参数的类型
*

* 代码示例：

@PostMapping( "/getPeople")
@ApiImplicitParam(name = "address",value = "地址",required = true,paramType = "query",dataType = "string"
public People getPeople(Integer id, @ApiParam(value="姓名", required = true) String name, String address){
*
*
* 如果希望在方法上配置多个参数时，使用@ApiImplicitParams 进行配置。示例如下：

@ApiImplicitParams(value={@ApiImplicitParam(name= "id",value = "编号",required = true),@ApiImplicitParam(name= "name",value = "姓名",required = true)})*/